﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace weiqijiance
{
    class DogObject
    {
        public string Dogid = "0000000000000000";
        public string UserPwd = "8888888888888888";
        public short Pwdlen = 16;
        public static IntPtr DogHandle;
        public bool verify()
        {
            NT124 obj = new NT124();
            short index = (short)(obj.NT124FindDevclass("0000000000000000") - 1);
            if (index < 0)
            {
                //MessageBox.Show("没有找到密码狗，请插入密码狗再运行");
                return false;
            }
            /*    DogObject.DogHandle = obj.NT124OpenDevclass("0000000000000000", index);
                if (obj.NT124VerifyUserPasswordclass(DogObject.DogHandle, UserPwd, Pwdlen) <= 0)
                {
                    //MessageBox.Show("密码狗不合法！"); 
                    return false;
                }*/
            return true;
        }
        public class NT124
        {

            ///*
            //*********************************************************************
            //* 函数: 查找指定产品设备
            //* 参数: pPidData 16字节产品标识 
            //* 返回: 查找到设备个数
            //* 权限: 匿名
            //* 说明: 打开设备前用来查询，是否是有多个设备
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124FindDev(const unsigned char *pPidData);//查找设备
            [DllImport("NT124.dll")]
            static extern short NT124FindDev(string pPidData);//查找设备
            public short NT124FindDevclass(string pPidData)
            {
                return NT124FindDev(pPidData);
            }
            ///*
            //*********************************************************************
            //* 函数: 打开设备
            //* 参数: pPidData 16字节产品标识字符串  Index  相应的设备索引
            //* 返回: >0正确,
            //* 权限: 匿名
            //* 说明: 取得相应的操作句柄
            //*********************************************************************
            //*/
            //    HANDLE	__stdcall	NT124OpenDev(const unsigned char *pPidData,short Index);//打开设备
            [DllImport("NT124.dll")]
            static extern IntPtr NT124OpenDev(string pPidData, short Index);//打开设备
            public IntPtr NT124OpenDevclass(string pPidData, short Index)
            {
                return NT124OpenDev(pPidData, Index);
            }

            ///*
            //*********************************************************************
            //* 函数: 写数据
            //* 参数: handle 操作设备句柄,StartAdd 开始地址 pWriteBuff 要写的数据,nBuffLen 数据长度 
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 用户或超级用户
            //* 说明: 校验超级用户密码及普通用户密码正确后进行操作。
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124DevWrite(HANDLE handle,short StartAdd,const unsigned char *pWriteBuff, short nBuffLen); //写设备
            [DllImport("NT124.dll")]
            static extern short NT124DevWrite(IntPtr handle, short StartAdd, string pWriteBuff, short nBuffLen); //写设备
            public short NT124DevWriteclass(IntPtr handle, short StartAdd, string pWriteBuff, short nBuffLen)
            {
                return NT124DevWrite(handle, StartAdd, pWriteBuff, nBuffLen);
            }

            ///*
            //*********************************************************************
            //* 函数: 读数据
            //* 参数: handle 操作设备句柄,StartAdd 开始地址 pReadBuff 要读的数据指针,nBuffLen 数据长度 
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 用户或超级用户
            //* 说明: 校验超级用户密码及普通用户密码正确后进行操作。
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124DevRead(HANDLE handle,short StartAdd,unsigned char *pReadBuff, short nBuffLen);  //读设备
            [DllImport("NT124.dll")]
            static extern short NT124DevRead(IntPtr handle, short StartAdd, string pReadBuff, short nBuffLen);  //读设备
            public short NT124DevReadclass(IntPtr handle, short StartAdd, string pReadBuff, short nBuffLen)  //读设备
            {
                return NT124DevRead(handle, StartAdd, pReadBuff, nBuffLen);
            }

            ///*
            //*********************************************************************
            //* 函数: 打开指示灯
            //* 参数: handle 操作设备句柄
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 匿名
            //* 说明: 
            //*********************************************************************
            //*/	
            //    short __stdcall		NT124LedOpen(HANDLE handle);    //LED亮
            [DllImport("NT124.dll")]
            static extern short NT124LedOpen(IntPtr handle);    //LED亮
            public short NT124LedOpenclass(IntPtr handle)
            {
                return NT124LedOpen(handle);
            }


            ///*
            //*********************************************************************
            //* 函数: 关闭指示灯
            //* 参数: handle 操作设备句柄
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 匿名
            //* 说明: 
            //*********************************************************************
            //*/
            //    short __stdcall		NT124LedClose(HANDLE handle);    //LED灭
            [DllImport("NT124.dll")]
            static extern short NT124LedClose(IntPtr handle);   //LED灭
            public short NT124LedCloseclass(IntPtr handle)
            {
                return NT124LedClose(handle);
            }


            ///*
            //*********************************************************************
            //* 函数: 获取设备编号全球唯一
            //* 参数: handle 操作设备句柄,pDidData 12字节取设备编号
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 匿名
            //* 说明: 任何时候都可以获取
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124GetDID(HANDLE handle,unsigned char *pDidData);    //取DID值
            [DllImport("NT124.dll")]
            static extern short NT124GetDID(IntPtr handle, string pDidData);    //取DID值
            public short NT124GetDIDclass(IntPtr handle, string pDidData)
            {
                return NT124GetDID(handle, pDidData);
            }

            ///*
            //*********************************************************************
            //* 函数: 验证超级用户密码
            //* 参数: handle 操作设备句柄,pSuperPassword 16字节密码  nLen 密码长度
            //* 返回: 验证次数>0为正确,255为不限次数
            //* 权限: 匿名
            //* 说明: 验证后可以进行任何操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124VerifySuperPassword(HANDLE handle,const unsigned char *pSuperPassword,short nLen);    //验证超级密码
            [DllImport("NT124.dll")]
            static extern short NT124VerifySuperPassword(IntPtr handle, string pSuperPassword, short nLen);   //验证超级密码
            public short NT124VerifySuperPasswordclass(IntPtr handle, string pSuperPassword, short nLen)
            {
                return NT124VerifySuperPassword(handle, pSuperPassword, nLen);
            }


            ///*
            //*********************************************************************
            //* 函数: 验证用户密码
            //* 参数: handle 操作设备句柄,UserPassword 16字节密码 nLen密码长度
            //* 返回: 验证次数>0为正确,255为不限次数
            //* 权限: 匿名
            //* 说明: 验证后可以进行任何操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124VerifyUserPassword(HANDLE handle,const unsigned char *pUserPassword,short nLen);    //验证用户密码
            [DllImport("NT124.dll")]
            static extern short NT124VerifyUserPassword(IntPtr handle, string pUserPassword, short nLen);    //验证用户密码
            public short NT124VerifyUserPasswordclass(IntPtr handle, string pUserPassword, short nLen)
            {
                return NT124VerifyUserPassword(handle, pUserPassword, nLen);
            }


            ///*
            //*********************************************************************
            //* 函数: 设置超级用户密码
            //* 参数: handle 操作设备句柄,SuperPassword 16字节密码 nLen 密码长度
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户
            //* 说明: 验证超级用户后可以进行任何操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124SetSuperPassword(HANDLE handle,const unsigned char *pSuperPassword,short nLen);    //设置超级密码
            [DllImport("NT124.dll")]
            static extern short NT124SetSuperPassword(IntPtr handle, string pSuperPassword, short nLen);    //设置超级密码
            public short NT124SetSuperPasswordclass(IntPtr handle, string pSuperPassword, short nLen)
            {
                return NT124SetSuperPassword(handle, pSuperPassword, nLen);
            }

            ///*
            //*********************************************************************
            //* 函数: 设置用户密码
            //* 参数: handle 操作设备句柄,UserPassword 16字节密码 nLen密码长度
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户或用户
            //* 说明: 验证超级用户或用户密码后可以进行任何操作
            //*********************************************************************
            //*/	
            //    short	__stdcall		NT124SetUserPassword(HANDLE handle,const unsigned char *pUserPassword,short nLen);    //设置用户密码
            [DllImport("NT124.dll")]
            static extern short NT124SetUserPassword(IntPtr handle, string pUserPassword, short nLen);    //设置用户密码
            public short NT124SetUserPasswordclass(IntPtr handle, string pUserPassword, short nLen)
            {
                return NT124SetUserPassword(handle, pUserPassword, nLen);
            }


            ///*
            //*********************************************************************
            //* 函数: 设置权限数据
            //* 参数: handle 操作设备句柄, SuperNum 超级密码重试次数，UserNum 用户密码重试次数(0为不限)
            //*		 pRWSwitch 块读写权限参数操作 16字节	
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户
            //* 说明: 验证超级用户或用户密码后可以进行任何操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124SetAuthorityData(HANDLE handle,short SuperNum,short UserNum,const unsigned char *pRWSwitch);    //设置权限数据
            [DllImport("NT124.dll")]
            static extern short NT124SetAuthorityData(IntPtr handle, short SuperNum, short UserNum, string pRWSwitch);    //设置权限数据
            public short NT124SetAuthorityDataclass(IntPtr handle, short SuperNum, short UserNum, string pRWSwitch)
            {
                return NT124SetAuthorityData(handle, SuperNum, UserNum, pRWSwitch);
            }


            ///*
            //*********************************************************************
            //* 函数: 获取授权数据
            //* 参数: handle 操作设备句柄,pRWSwitch 块读写权限参数操作 16字节('0'或'1')	
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户或用户
            //* 说明: 任何权限都可以操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124GetAuthorityData(HANDLE handle,unsigned char *pRWSwitch);    //读取权限数据
            [DllImport("NT124.dll")]
            static extern short NT124GetAuthorityData(IntPtr handle, string pRWSwitch);   //读取权限数据
            public short NT124GetAuthorityDataclass(IntPtr handle, string pRWSwitch)
            {
                return NT124GetAuthorityData(handle, pRWSwitch);

            }

            ///*
            //*********************************************************************
            //* 函数: 设置显示信息
            //* 参数: handle 操作设备句柄,DispData 显示信息 34字节数据 nLen显示数据长度	
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户
            //* 说明: 验证超级用户可以设置后可以操作
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124SetDispInfo(HANDLE handle,const unsigned char *pDispData,short nLen);    //设置显示信息

            [DllImport("NT124.dll")]
            static extern short NT124SetDispInfo(IntPtr handle, string pDispData, short nLen);    //设置显示信息
            public short NT124SetDispInfoclass(IntPtr handle, string pDispData, short nLen)
            {
                return NT124SetDispInfo(handle, pDispData, nLen);
            }


            ///*
            //*********************************************************************
            //* 函数: 取产品标识ID
            //* 参数: handle 操作设备句柄,pPidData 返回的16字节ID
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 匿名
            //* 说明: 获取当前设备的产品标识
            //*********************************************************************
            //*/	
            //    short	__stdcall		NT124GetPID(HANDLE handle,unsigned char *pPidData);    //取PID值
            [DllImport("NT124.dll")]
            static extern short NT124GetPID(IntPtr handle, string pPidData);    //取PID值
            public short NT124GetPIDclass(IntPtr handle, string pPidData)
            {
                return NT124GetPID(handle, pPidData);
            }



            ///*
            //*********************************************************************
            //* 函数: 设置产品标识ID
            //* 参数: handle 操作设备句柄,pProductPassword 1-56字节 nBuffLen 产品密码长度，
            //*       pPidData 返回的产品标识16字节
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 超级用户
            //* 说明: 设置产品标识
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124SetPID(HANDLE handle,const unsigned char *pProductPassword,short nBuffLen,unsigned char *pPidData);    //设置PID值
            [DllImport("NT124.dll")]
            static extern short NT124SetPID(IntPtr handle, string pProductPassword, short nBuffLen, string pPidData);    //设置PID值
            public short NT124SetPIDclass(IntPtr handle, string pProductPassword, short nBuffLen, string pPidData)    //设置PID值
            {
                return NT124SetPID(handle, pProductPassword, nBuffLen, pPidData);
            }


            ///*
            //*********************************************************************
            //* 函数: 关闭设备
            //* 参数: handle 操作设备句柄,
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 匿名
            //* 说明: 复位DEV
            //*********************************************************************
            //*/
            //    short	__stdcall		NT124CloseDev(HANDLE handle);	// 关闭设备	
            [DllImport("NT124.dll")]
            static extern short NT124CloseDev(IntPtr handle);	// 关闭设备	
            public short NT124CloseDevclass(IntPtr handle)
            {
                return NT124CloseDev(handle);
            }

            ///*
            //*********************************************************************
            //* 函数: 硬件MD5加密
            //* 参数: handle 操作设备句柄, SourceData  源数据    nDataLen 数据长度(1-51)
            //*       ObjData     目标数据   32字节
            //* 返回: 0为正确，其它请参考返回值说明 
            //* 权限: 无
            //*********************************************************************
            //*/
            //    short	__stdcall       NT124MD5EncryptData(HANDLE handle,const unsigned char *SourceData,short nBuffLen,char *ObjData);
            [DllImport("NT124.dll")]
            static extern short NT124MD5EncryptData(IntPtr handle, string SourceData, short nBuffLen, ref string ObjData);
            public short NT124MD5EncryptDataclass(IntPtr handle, string SourceData, short nBuffLen, ref string ObjData)
            {
                return NT124MD5EncryptData(handle, SourceData, nBuffLen, ref ObjData);
            }

        }
    }
}
